package com.cuckoo.cuckoo_app2.business.Imp;

import com.cuckoo.cuckoo_app2.MyApplication;
import com.cuckoo.cuckoo_app2.dao.SiteLink;
import com.cuckoo.cuckoo_app2.business.SiteLinkBusiness;
import com.cuckoo.cuckoo_app2.greendao.DaoSession;
import com.cuckoo.cuckoo_app2.greendao.SiteLinkDao;

import java.util.List;

public class SiteLinkBusinessImp implements SiteLinkBusiness {

    @Override
    public Long install(SiteLink siteLink) {
        // 获取数据库会话对象
        DaoSession db = MyApplication.getInstances().getDaoSession();
        return db.getSiteLinkDao().insert(siteLink);
    }

    @Override
    public void installList(List<SiteLink> siteLinks) {
        DaoSession db = MyApplication.getInstances().getDaoSession();
        db.getSiteLinkDao().insertInTx(siteLinks);
    }

    /**
     * 更新平台所有站点链接信息。
     * 该方法用于批量替换数据库中的站点链接信息。它首先清除现有的所有链接，然后插入新的链接列表。
     * 这种做法确保了数据库中站点链接信息的完整性和一致性。
     *
     * @param siteLinks 新的站点链接列表，将被批量插入到数据库中。
     */
    @Override
    public void updataAll(List<SiteLink> siteLinks) {
        // 获取数据库会话对象
        DaoSession db = MyApplication.getInstances().getDaoSession();
        // 清除现有的所有站点链接
        // 先清除
        db.getSiteLinkDao().deleteAll();
        // 批量插入新的站点链接
        // 再插入
        db.getSiteLinkDao().insertInTx(siteLinks);
    }

    /**
     * 获取平台所有站点链接的信息。
     * <p>
     * 本方法通过查询数据库来获取所有站点链接的信息列表。它不接受任何参数，
     * 并返回一个包含所有站点链接的列表。这个方法是针对 DaoSession 的一个覆盖方法，
     * 旨在提供一个统一的方式来获取所有站点链接的数据。
     *
     * @return List<SiteLink> - 包含所有站点链接的列表。
     */
    @Override
    public List<SiteLink> getAll() {
        // 获取应用程序实例中的数据库会话
        DaoSession db = MyApplication.getInstances().getDaoSession();
        // 使用查询构建器查询所有站点链接，并返回列表
        List<SiteLink> list = db.getSiteLinkDao().queryBuilder().orderDesc(SiteLinkDao.Properties.UserCount).list();
        return list;
    }

    /**
     * 工具ID查询列表
     *
     * @param ids
     * @return
     */
    @Override
    public List<SiteLink> getByIdsAll(List<String> ids) {
        DaoSession db = MyApplication.getInstances().getDaoSession();
        List<SiteLink> list = db.getSiteLinkDao().queryBuilder().where(SiteLinkDao.Properties.Id.in(ids)).list();
        return list;
    }

    @Override
    public SiteLink getByID(String id) {
        DaoSession db = MyApplication.getInstances().getDaoSession();
        List<SiteLink> list = db.getSiteLinkDao().queryBuilder().where(SiteLinkDao.Properties.Id.eq(id)).limit(1).list();
        if (list.size() > 0) {
            return list.get(0);
        }
        return null;
    }

    @Override
    public long count() {
        DaoSession db = MyApplication.getInstances().getDaoSession();
        return db.getSiteLinkDao().queryBuilder().count();
    }
}
